home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 12, No. 10 (1991-10)(MindCraft Publishing)(Side A).zip / Nibble Volume 12, No. 10 (1991-10)(MindCraft Publishing)(Side A).po / CURSOR.5.S < prev    next >
Text File  |  1996-12-24  |  5KB  |  190 lines

  1. ********************************
  2. * CURSOR.5                     *
  3. * by Mark  R. Craven           *
  4. *                              *
  5. * Copyright (C) 1991 by        *
  6. * MindCraft Publishing Corp.   *
  7. * Lincoln, MA 01773            *
  8. *                              *
  9. * Modified from CURSOR.BAR     *
  10. * by Jim Ganz                  *
  11. *                              *
  12. * (Nibble Magazine, Dec '84)   *
  13. *                              *
  14. * Syntax:                      *
  15. * CALL MEM,TOPLIM,BOTLIM,      *
  16. *      LMRGIN,RMRGIN           *
  17. *                              *
  18. * TOPLIM=(1-24)  BOTLIM=1-24)  *
  19. * LMRGIN=(1-40)  RMRGIN=(1-40) *
  20. *                              *
  21. * Returns with LINE = PEEK(4)  *
  22. *  ESC=LINE =0                 *
  23. *  '?'=LINE = 255              *
  24. *                              *
  25. * e.g.  CALL 768,2,18,10,30    *
  26. *                              *
  27. *  APPLESOFT TOOLKIT ASSEMBLER *
  28. *                              *
  29. ********************************
  30.  
  31. ********************************
  32. *   Equates:                   *
  33. ********************************
  34.  
  35.  
  36. BASCALC   EQU $FBC1  
  37. BASL      EQU $28 
  38. BOTLIM    EQU $03 
  39. CHKCOM    EQU $DEBE 
  40. CLRKBD    EQU $C010 
  41. FRMNUM    EQU $DD67 
  42. CONINT    EQU $E6FB 
  43. KYBD      EQU $C000     
  44. LINE      EQU $04 
  45. MEM       EQU $300 
  46. TOPLIM    EQU $02 
  47.                          ; 
  48. LMRGIN    EQU $06        ;LEFT MARGIN  
  49. RMRGIN    EQU $07        ;RIGHT MARGIN 
  50.  
  51.           ORG MEM 
  52.  
  53. ********************************
  54. *     Initialize limits        *
  55. ********************************
  56.  
  57.           JSR CHKCOM     ;Advance TXTPTR past comma        
  58.           JSR FRMNUM     ;Get variable/expression       
  59.           JSR CONINT     ;Convert to integer in X       
  60.           DEX 
  61.           STX TOPLIM 
  62.           STX LINE   
  63.           JSR CHKCOM   
  64.           JSR FRMNUM    
  65.           JSR CONINT  
  66.           DEX  
  67.           STX BOTLIM  
  68.           JSR CHKCOM  
  69.           JSR FRMNUM
  70.           JSR CONINT 
  71.           DEX 
  72.           STX LMRGIN     ;Left Margin Value  
  73.           JSR CHKCOM
  74.           JSR FRMNUM
  75.           JSR CONINT 
  76.           DEX 
  77.           STX RMRGIN     ;Right Margin Value  
  78.  
  79. ********************************
  80. * Highlight cursor line        *
  81. * (change NORMAL to INVERSE)   *
  82. ********************************
  83.  
  84. START     LDA LINE 
  85.           JSR BASCALC    ;Set BASL,H      
  86.           LDY RMRGIN     ;Right Margin 
  87. CLOOP1    LDA (BASL),Y   ;Get a Character    
  88.           CMP #$A0       ;Is it a SPACE?    
  89.           BNE CBAR 
  90.           DEY
  91.           BPL CLOOP1     ;Test for blank line    
  92.           BMI LEFT
  93. CBAR      LDY RMRGIN   
  94. CLOOP4    LDA (BASL),Y  
  95.           AND #$3F       ;Change it to inverse   
  96.           STA (BASL),Y   ;and put it back. 
  97.           DEY
  98.           CPY LMRGIN     ;Compare to left margin 
  99.           BPL CLOOP4     ;Loop til end of line   
  100.  
  101. ********************************
  102. * Wait for keypress            *
  103. ********************************
  104.  
  105.           LDA CLRKBD     ;Clear keyboard  
  106. KLOOP     LDX KYBD       ;Get keypress    
  107. LEFT      CPX #$88       ;Is it a LEFT ARROW?    
  108.           BEQ CONT   
  109.           CPX #$8B       ;Is it a DOWN ARROW? 
  110.           BEQ CONT
  111.           CPX #$95       ;Is it a RIGHT ARROW?     
  112.           BEQ CONT
  113.           CPX #$8A       ;Is it an UP ARROW? 
  114.           BEQ CONT
  115.           CPX #$8D       ;Is it a RETURN char?    
  116.           BEQ CALLER     ;Go exit if RETURN
  117.           CPX #$BF       ;Is it a '?'
  118.           BEQ HELP       ;Load 255 into memory
  119.           CPX #$9B       ;Is it the ESC Character?
  120.           BEQ ESC        ;Exit without a choice
  121.           BNE KLOOP      ;None of the above.
  122. HELP      LDA #$FE       ;Help flag
  123.           CLC
  124.           BCC OUT1 
  125. ESC       LDA #$00       ;Put zero in accumulator
  126.           STA LINE       ;Store the ESC flag
  127.           BEQ OUT2
  128. BACK      BNE START      ;Loop back to start 
  129.  
  130. ********************************
  131. * Return to caller             *
  132. ********************************
  133.  
  134. CALLER    LDY RMRGIN     ;Reset last line to NORMAL 
  135. CLOOP3    LDA (BASL),Y  
  136.           ORA #$80
  137.           STA (BASL),Y
  138.           DEY 
  139.           CPY LMRGIN     ;Check left margin  
  140.           BPL CLOOP3   
  141.           LDA LINE
  142.           SEC
  143.           SBC TOPLIM
  144. OUT1      STA LINE
  145.           INC LINE
  146. OUT2      LDA CLRKBD
  147.           RTS            ;Exit 
  148.  
  149. ********************************
  150. *  Lowlight cursor line        *
  151. * (Change INVERSE to NORMAL)   *
  152. ********************************
  153.  
  154. CONT      LDY RMRGIN     ;Load right margin value 
  155. CLOOP2    LDA (BASL),Y   
  156.           ORA #$80       ;Change to NORMAL    
  157.           STA (BASL),Y
  158.           DEY
  159.           CPY LMRGIN     ;Check left margin 
  160.           BPL CLOOP2
  161.           LDA LINE
  162.           CPX #$95
  163.           BEQ RCONT
  164.           CPX #$8A       ;Right arrow
  165.           BEQ RCONT
  166.  
  167. ********************************
  168. * Move cursor up one line      *
  169. ********************************
  170.  
  171.           CMP TOPLIM     ;Are we above the top line?     
  172.           BNE LCONT      ;No, so move up one line.   
  173.           LDA BOTLIM     ;Wraparound to bottom line    
  174.           STA LINE
  175.           BNE BACK       ;Always.  
  176. LCONT     DEC LINE  
  177.           BPL BACK  
  178.  
  179. ********************************
  180. * Move cursor down one line    *
  181. ********************************
  182.  
  183. RCONT     CMP BOTLIM     ;Are we below the bottom line?   
  184.           BNE RCONT1     ;No, so move down one line  
  185.           LDA TOPLIM     ;Wraparound to top line.
  186.           STA LINE
  187.           BPL BACK 
  188. RCONT1    INC LINE  
  189.           BNE BACK       ;Back to START 
  190.